package org.wang.generalcode.modules.gen.config.template;

import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StreamUtils;
import org.wang.generalcode.modules.gen.util.JsonUtils;
import org.wang.generalcode.support.exception.BusinessException;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.rmi.ServerException;

/**
 * 代码生成配置内容
 */
@Configuration
public class GeneratorConfig {

    @Value("${generator.template}")
    private String template;

    public GeneratorInfo getGeneratorConfig() {
        // 模板路径，如果不是以/结尾，则添加/
        if (!StrUtil.endWith(template, '/')) {
            template = template + "/";
        }

        // 尝试获取资源文件的 URL
//        URL resourceUrl = ResourceLoader.class.getResource(template + "config.json");
//        System.out.println("Resource URL: " + resourceUrl);


        // 模板配置文件
        InputStream isConfig = null;
        try {
            isConfig = Files.newInputStream(Paths.get(template + "config.json"));
        } catch (IOException e) {
            throw new BusinessException(e.getMessage());
        }

        if (isConfig == null) {
            throw new BusinessException("模板配置文件，config.json不存在");
        }

        try {
            // 读取模板配置文件
            String configContent = StreamUtils.copyToString(isConfig, StandardCharsets.UTF_8);
            GeneratorInfo generator = JsonUtils.parseObject(configContent, GeneratorInfo.class);
            for (TemplateInfo templateInfo : generator.getTemplates()) {
                // 模板文件
                InputStream isTemplate = null;
                try {
                    isTemplate = Files.newInputStream(Paths.get(template + templateInfo.getTemplateName()));
                } catch (IOException e) {
                    throw new BusinessException(e.getMessage());
                }

//                        this.getClass().getResourceAsStream(template + templateInfo.getTemplateName());
                if (isTemplate == null) {
                    throw new ServerException("模板文件 " + templateInfo.getTemplateName() + " 不存在");
                }
                // 读取模板内容
                String templateContent = StreamUtils.copyToString(isTemplate, StandardCharsets.UTF_8);

                templateInfo.setTemplateContent(templateContent);
            }
            return generator;
        } catch (IOException e) {
            throw new BusinessException("读取config.json配置文件失败");
        }
    }
}
